package com.yangchuang.openpicture.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 图片信息表实体类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "picture", autoResultMap = true)
public class Picture implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 上传用户ID（外键，关联用户表）
     */
    @TableField(value = "user_id")
    private Long userId;

    /**
     * 分类ID（外键，关联分类表）
     */
    @TableField(value = "category_id")
    private Long categoryId;

    /**
     * 图片的用户自定义名称（可重复）
     */
    @TableField(value = "name")
    private String name;

    /**
     * 图片在OSS中的访问URL
     */
    @TableField(value = "url")
    private String url;

    /**
     * 图片描述
     */
    @TableField(value = "description")
    private String description;


    /**
     * 图片大小（字节）
     */
    @TableField(value = "`size`")
    private Long size;

    /**
     * 图片宽度（像素）
     */
    @TableField(value = "width")
    private Integer width;

    /**
     * 图片高度（像素）
     */
    @TableField(value = "height")
    private Integer height;

    /**
     * 标签列表
     */
    @TableField(value = "tags", typeHandler = JacksonTypeHandler.class)
    private List<String> tags;

    /**
     * 可见性：1-公开，0-私有
     */
    @TableField(value = "visibility")
    private Integer visibility;

    /**
     * 上传时间
     */
    @TableField(value = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date updateTime;

    /**
     * 逻辑删除：0-正常，1-删除
     */
    @TableField(value = "is_deleted")
    @TableLogic(value = "0", delval = "1")
    private Integer isDeleted;
}